﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Project_2._2.ViewModels;
using Project_2._2.Models;
using System.Web.Security;
using Project_2._2.Extra;



namespace Project_2._2.Controllers
{
    public class PersonController : Controller
    {
        private QuanLyThueXeEntities db = new QuanLyThueXeEntities();
        private Common cm = new Common();
        //
        // GET: /Person/
        #region Login
        public ActionResult Login()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Login(Login_ViewModels person)
        {
            if (ModelState.IsValid)
            {
                if (person.captcha.CompareTo(Session["Captcha"]) != 0)
                    ModelState.AddModelError("Captcha", "Mã xác nhận không chính xác.");
                else
                {
                    if (cm.CheckLogin(person.TenDangNhap, person.Password))
                    {
                        
                        FormsAuthentication.SetAuthCookie(person.TenDangNhap, person.RememberMe);
                        return RedirectToAction("Default", "Default");
                    }
                    else
                    {
                        ModelState.AddModelError("", "Tên đăng nhập hoặc mật khẩu không đúng.");
                       // ViewBag.SucessMessage = "Tên đăng nhập hoặc mật khẩu bị sai.";
                    }
                }
            }

            return View(person);
        }
        #endregion

        #region Logout
        // POST: /Account/LogOff

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();
            return RedirectToAction("Default", "Default");
        }
        #endregion

        #region Register
        public virtual ActionResult Register()
        {
            return View();            
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public virtual ActionResult Register(PersonViewModels person)
        {             
            if (ModelState.IsValid)
            {
                if (cm.CheckUserName(person.TenDangNhap) == true)
                    ModelState.AddModelError("TenDangNhap", "Tên Đăng Nhập này đã được đăng ký.");
                else if ( (DateTime.Now.Year - person.NgaySinh.Year) < 18)
                    ModelState.AddModelError("NgaySinh", "Năm sinh không đủ 18 tuổi.");
                else if(person.captcha.CompareTo(Session["Captcha"]) != 0)
                    ModelState.AddModelError("Captcha", "Mã xác nhận không chính xác.");
                else
                {
                    // tao 1 person moi voi thong tin tu personViewModels
                    Person ps = new Person();
                    ps.TenDangNhap = person.TenDangNhap;
                    // ma hoa pass
                    string pass = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(person.MatKhau, "MD5");
                    ps.MatKhau = pass;
                    //
                    ps.NgaySinh = person.NgaySinh;
                    ps.HoTen = person.HoTen;
                    ps.GioiTinh = person.GioiTinh;
                    ps.Email = person.Email;
                    ps.DienThoai = person.DienThoai;
                    ps.DiaChi = person.DiaChi;
                    ps.isDelete = false;
                    ps.RoleId = 2;
                    // Add vao Db
                    db.People.Add(ps);
                    db.SaveChanges();
                    //return RedirectToAction("Default","Default");
                    ModelState.Clear();
                    person = new PersonViewModels();
                    ModelState.AddModelError("","Tạo tài khoản thành công.");
                }
            }
            return View(person);
        }

        #endregion

        #region Forgot Password
        public ActionResult ForgotPassword()
        {
            return View();
        }

        [HttpPost]
        public ActionResult ForgotPassword( ForgotPass_ViewModels person )
        {
            if (ModelState.IsValid)
            {
                if (person.captcha.CompareTo(Session["Captcha"]) != 0)
                    ModelState.AddModelError("Captcha", "Mã xác nhận không chính xác.");
                else
                {
                    if (cm.CheckEmail(person.Email) == true)
                    {
                        ModelState.AddModelError("","Bạn đã gửi yêu cầu thành công. Hãy cập nhật lại Email của bạn!");
                    }
                    else
                        ModelState.AddModelError("Email", "Email này chưa được đăng ký trong hệ thống.");
                    
                }
            }
            
            return View();
        }
        #endregion

        #region PasswordChange
        public ActionResult PasswordChange()
        {
            return View();
        }

        [HttpPost]
        public ActionResult PasswordChange( PasswordChange_ViewModels person)
        {
            if (ModelState.IsValid)
            {
                if( string.IsNullOrEmpty( person.captcha))
                    ModelState.AddModelError("captcha", "Bạn chưa nhập mã xác nhận.");
                else if (person.captcha.CompareTo(Session["Captcha"]) != 0)
                    ModelState.AddModelError("Captcha", "Mã xác nhận không chính xác.");
                else
                {
                    var ps = (from p in db.People where p.TenDangNhap == User.Identity.Name select p).First();
                    string OldPass = FormsAuthentication.HashPasswordForStoringInConfigFile(person.OldPassword, "MD5");
                    if (ps.MatKhau.Equals(OldPass))
                    {
                        string NewPass = FormsAuthentication.HashPasswordForStoringInConfigFile(person.NewPassword, "MD5");
                        ps.MatKhau = NewPass;
                        UpdateModel(ps);
                        db.SaveChanges();
                        
                        ModelState.Clear();
                        person = new PasswordChange_ViewModels();
                        ModelState.AddModelError("", "Thay đổi mật khẩu thành công.");
                    }
                    else
                        ModelState.AddModelError("OldPassword", "Mật khẩu củ không đúng.");
                }
            }
            return View( person);
        }
        #endregion

        #region Profile
        public ActionResult Profile()
        {
            var user = (from p in db.People where p.TenDangNhap == User.Identity.Name select p).ToList();
            return View(user);
        }
        #endregion
        


    }
}
